#ifndef _{{ basic_info.name }}_H_
#define _{{ basic_info.name }}_H_

/*------------------------ Include Begin --------------------------*/

// C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <math.h>
#include <time.h>
#include <ctype.h>

// C++
#include <iostream>
#include <fstream>
#include <chrono>
#include <string>
#include <random>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <stdbool.h>
#include <mutex>
#include <chrono>
#include <sstream>

/*------------------------  Include End  -------------------------*/

/*------------------------  Service Info Begin  --------------------------*/
/**
 * @name:    {{ basic_info.name }}
 * @chinese_name: {{ basic_info.chinese_name }}
 * @description: {{ basic_info.description }}
 * @version: {{ basic_info.version }}
 * @build_time: {{ basic_info.build_time }}
 * @license: {{ basic_info.license }}
 * @service_path: {{ basic_info.service_path }}
 * @resource_requirement:
 *         + cpu_architecture: {{ basic_info.resource_requirement.cpu_architecture }}
 *         + memory: {{ basic_info.resource_requirement.memory }}
 *         + hard_disk: {{ basic_info.resource_requirement.hard_disk }}
 * @developer:
 *      +name: {{ basic_info.owner.developer.name }}
 *      +email: {{ basic_info.owner.developer.email }}
 * @maintainer:
 *      +name: {{ basic_info.owner.maintainer.name }}
 *      +email: {{ basic_info.owner.maintainer.email }}
 * @operating_system:
{% for os in basic_info.operating_system %}
 *      +name: {{ os.os_name }}
{% for ver_key, ver_val in os.os_version.items() %}
 *      +{{ ver_key }}: {{ ver_val }}
{% endfor %}
{% endfor %}
 */
/*------------------------  Service Info End  --------------------------*/

/*------------------------  Return Type Begin  --------------------------*/
{% for code, value in return_code.items() %}
#define {{ code }} {{ value }}
{% endfor %}
/*------------------------  Return Type End  --------------------------*/


/*------------------------  Message Info Begin  --------------------------*/
{% for msg in messages %}
typedef struct
{
{% for field in msg.fields %}
    {{ field.type }} {{ field.name }};          // {{ field.description }}
{% endfor %}
} {{ msg.name }};

{% endfor %}
/*------------------------  Message Info End  --------------------------*/

/*------------------------  Interface Declaration Begin  --------------------------*/
{% for method in methods %}
// {{ method.description }}
int {{ method.name }}({{ method.requestMsg }}* {{ method.requestMsg}}, {{ method.responseMsg }}* {{ method.responseMsg }});

{% endfor %}
/*------------------------  Interface Declaration End  --------------------------*/

#endif // _{{ basic_info.name}}_H_